一封小小邮件背后的防范策略
邮件这种通讯方式在国内不是很常用,一般情况下我们都在找工作时用来收 offer。但邮件在国外却是一种很重要的通讯方式,许多外国人习惯于使用邮件进行工作沟通。对于做跨境电商的公司来说,邮件营销更是一个非常重要的营销方式。
相信做过邮件发送相关功能的朋友都知道,我们可以使用 Java 程序发送邮件,并且可以任意填写收件人的名称,例如我可以把发件人写成 service@qq.com
以此来假冒企鹅公司的客服,从而发送一些诈骗信息。
但实际上通过这种方式发出去的邮箱,很可能到不了用户的邮箱中,为什么呢?因为现今的邮件服务商都采用了 DKIM 和 SPF 验证来保护自己的邮件域名,避免别人假冒自己的域名发送钓鱼邮件。
什么是 DKIM ?
DKIM 全称是 DomainKeys Identified Mail,即域名密钥识别邮件标准,其存在的意义是用于防止电子邮件欺诈,即防止别人冒用你的域名给别人发邮件。一般来说,发送方会在电子邮件中插入签名,而接收方则通过域名 DNS 解析拿到公钥进行对签名进行验证。
提示:这里会涉及到关于公钥、私钥的知识,如果你不太清楚,可以先百度了解一下再阅读。
简单地说,我们通过生成两把钥匙,一把叫私钥,一把叫私钥。私钥是存在发件服务器的,在发送邮件的时候对发送内容进行签名,之后将签名信息存入邮件里,随着邮件发送携带给收件箱服务器。公钥则是通过 DNS 解析,存放在域名的 DNS TXT 记录中,任何人可以获取到这把公钥。
当收件人服务器收到这封邮件时,其会通过发件人的域名获取到公钥。之后用公钥对邮件的签名进行验证,如果验证正确,那么表明这封邮件确实是由该域名所有者发出的,而不是其他人伪造的。
这里暗含一个知识点:能被公钥验证正确的数据,必然是用对应私钥加密的数据。先记住就好,想弄清楚原理,可以百度一下。
只有通过公钥验证的邮件,才会被正确投递到用户的收件箱中,否则会被附件服务器拒收。整个过程如下图所示。
那么如何设置 DKIM 呢?
一般情况下,我们都是通过邮件服务商发送邮件的。这时候直接到邮件服务商的管理后台,获取相关配置信息,然后为对应的发件域名配置一个 DNS 记录即可。
什么是 SPF ?
SPF,全称为 Sender Policy Framework,即发件人策略框架。其实用来验证哪些服务器或者 IP 可以发送哪些域名的邮件的。例如:我的网站为 shuyi.tech
,那么我当然不允许其他人冒充 me@shuyi.tech
的邮箱给别人发邮件。
而 SPF 记录就是在 DNS 上配置一条记录,这条记录显示了哪些域名或者 IP 可以使用这个邮件域名。我们只要把自己发邮件的服务器的域名或者 IP 记录上去,那么其他人就冒充不了我们了。SPF 记录的出现,就是为了防止随意伪造发件人。
SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:假设邮件服务器收到了一封邮件,来自主机的 IP 是 143.174.12.123
,并且声称发件人为 email@example.com
。为了确认发件人不是伪造的,邮件服务器会去查询 example.com
的 SPF 记录。如果该域的 SPF 记录设置允许 IP 为 173.194.72.103
的主机发送邮件,则服务器就认为这封邮件是合法的。如果不允许,则通常会退信,或将其标记为垃圾或仿冒邮件。
因为不怀好心的人虽然可以「声称」他的邮件来自 example.com,但是他却无权操作 example.com 的 DNS 记录;同时他也无法伪造自己的 IP 地址。因此 SPF 是很有效的,当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。
与 DKIM 类似,一般情况下,我们都可以通过邮件服务商配置对应的 SPF 记录值。之后在我们的域名服务商上,为对应的域名配置好对应的 SPF 记录值即可。
DKIM 与 SPF 的异同?
DKIM 与 SPF 都是用来防止伪造发件人的,但它们的侧重点不同。
DKIM 侧重于对邮件的完整性进行校验,如果有别人修改了邮件内容,那么通过 DKIM 就可以识别出来,从而避免被伪造。而 SPF 则是通过校验哪些 IP 或域名有权限发送邮件,其维护了一个权限列表,但是不具有校验邮件完整性的能力。
从实现原理来看,DKIM 使用了公钥、私钥的加密方式,相对更加复杂。而 SPF 则是简单的进行信息的比对,相对来说更加简单一些。
参考资料
DKIM_百度百科 SPF 记录:原理、语法及配置方法简介 - Blog - Renfei Song
好了,这就是今天分享的全部内容了。
如果你喜欢今天这篇文章,欢迎一键三连,你们的支持就是我最大的动力!
推荐阅读